package itheima02;

import java.util.Arrays;
import java.util.Comparator;

/*
    Lambda表达式有参数有返回值

        (参数列表)->{...return xxx;}

        定义Person数组,对数组元素按照年龄升序排列

        java.util.Arrays工具类:
        静态方法:
            public static <T> void sort(T[] arr, Comparator<T> comp)
                功能: 对方法参数中的数组arr,按照方法参数comp指定的规则进行排序
                参数:
                  T[] arr: 数组
                  Comparator<T> comp: 接口
                  java.util.Comparator<T>接口: 用来指定排序规则的
                  抽象方法:
                  public abstract int compare(T t1,T t2):
                    第一个参数-第二个参数: 升序
                    第二个参数-第一个参数: 降序
                //年龄升序排列:
                 public int compare(Person p1,Person p2){
                    return p1.getAge() - p2.getAge();
                 }

 */
public class Demo04Lambda {
    public static void main(String[] args) {
        /*Person[] arr = new Person[]{
             new Person("张三",28),
             new Person("李四",18),
             new Person("王五",38)
        };*/
        /*Person[] arr = {
                new Person("张三",28),
                new Person("李四",18),
                new Person("王五",38)
        };*/

        Person[] arr = new Person[3];
        arr[0] = new Person("张三",28);
        arr[1] = new Person("李四",18);
        arr[2] = new Person("王五",38);
        System.out.println("排序前: "+ Arrays.toString(arr));
        //1.匿名内部类对象的方式
        Arrays.sort(arr, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge() - o2.getAge();
            }
        });
        System.out.println("年龄升序排序后: "+Arrays.toString(arr));

        //2.lambda表达式的方式
        Arrays.sort(arr,(Person p1,Person p2)->{return p2.getAge() - p1.getAge();});
        System.out.println("年龄降序排序后: "+Arrays.toString(arr));
    }
}
